home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / GnomeCodecInstall / Main.py next >
Text File  |  2009-10-20  |  4KB  |  134 lines

  1. # -*- coding: utf-8 -*-
  2. # Copyright (c) 2008 Sebastian Dr├╢ge <sebastian.droege@collabora.co.uk>, GPL
  3.  
  4. import sys
  5. import gtk
  6. import gettext
  7. from gettext import gettext as _
  8. import re
  9.  
  10. # from gst.pbutils - copied to avoid overhead of the import
  11. (INSTALL_PLUGINS_SUCCESS,
  12.  INSTALL_PLUGINS_NOT_FOUND,
  13.  INSTALL_PLUGINS_ERROR,
  14.  INSTALL_PLUGINS_PARTIAL_SUCCESS,
  15.  INSTALL_PLUGINS_USER_ABORT) = range(5)
  16.  
  17. class Request(object):
  18.   def __init__(self, major, minor, app, descr, kind, caps=None, feature=None):
  19.     self.major = major
  20.     self.minor = minor
  21.     self.application = app
  22.     self.description = descr
  23.     self.gstkind = kind      # decoder, encoder, urisink, urisource, ...
  24.     self.caps = caps
  25.     self.feature = feature
  26.  
  27. def parse_arguments(args):
  28.   regex = re.compile("^gstreamer\|([0-9])+\.([0-9]+)\|(.+)\|(.+)\|([a-z]+)-(.*)[|]?")
  29.   requests = []
  30.   xid = None
  31.   gst_init = False
  32.   major = 0
  33.   minor = 0
  34.   for arg in args:
  35.     if arg[0:16] == "--transient-for=":
  36.       try:
  37.         xid = int(arg[16:])
  38.       except:
  39.         pass
  40.       continue
  41.     elif arg[0:2] == "--":
  42.       continue
  43.  
  44.     match = regex.search(arg)
  45.     if not match:
  46.       continue
  47.     try:
  48.       r_major = int(match.group(1))
  49.       r_minor = int(match.group(2))
  50.       if not gst_init:
  51.         import pygst
  52.         pygst.require("%d.%d" % (r_major, r_minor))
  53.         import gst
  54.         gst_init = True
  55.         major = r_major
  56.         minor = r_minor
  57.       elif r_major != major or r_minor != minor:
  58.         return None
  59.     except ValueError:
  60.       continue
  61.  
  62.     if match.group(5) == "decoder" or match.group(5) == "encoder":
  63.       try:
  64.         requests.append(Request(major, minor, match.group(3), match.group(4), match.group(5), caps=gst.Caps(match.group(6))))
  65.       except TypeError:
  66.         continue
  67.     elif match.group(5) == "urisource" or match.group(5) == "urisink" or match.group(5) == "element":
  68.       requests.append(Request(major, minor, match.group(3), match.group(4), match.group(5), feature=match.group(6)))
  69.     else:
  70.       continue
  71.   return (requests, xid)
  72.  
  73. def set_transient_for_xid(widget, xid):
  74.   try:
  75.     if xid != None:
  76.       parent = gtk.gdk.window_foreign_new(xid)
  77.       if parent != None:
  78.         widget.realize()
  79.         widget.get_window().set_transient_for(parent)
  80.   except:
  81.     pass
  82.  
  83. def main(args):
  84.   gettext.textdomain("gnome-codec-install")
  85.   gettext.bindtextdomain("gnome-codec-install")
  86.  
  87.   (requests, xid) = parse_arguments(args)
  88.  
  89.   try:
  90.     icon = gtk.icon_theme_get_default().load_icon("gnome-codec-install", 32, 0)
  91.   except:
  92.     icon = None
  93.   if icon:
  94.     gtk.window_set_default_icon(icon)
  95.  
  96.   if requests == None or len(requests) == 0:
  97.     sys.stderr.write("invalid commandline '%s'\n" % (args))
  98.     dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL,
  99.                             gtk.MESSAGE_ERROR, gtk.BUTTONS_OK,
  100.                             _("Invalid commandline"))
  101.     dlg.format_secondary_text(_("The parameters passed to the application "
  102.                                 "had an invalid format. Please file a bug!\n\n"
  103.                                 "The parameters were:\n%s") % ("\n".join(map(str, args))))
  104.     dlg.set_title(_("Invalid commandline"))
  105.     set_transient_for_xid(dlg, xid)
  106.     dlg.run()
  107.     dlg.destroy()
  108.     exit(INSTALL_PLUGINS_ERROR)
  109.   else:
  110.     dlg = gtk.MessageDialog(None, gtk.DIALOG_MODAL,
  111.                             gtk.MESSAGE_QUESTION, gtk.BUTTONS_CANCEL,
  112.                             _("Search for suitable plugin?"))
  113.     dlg.format_secondary_text(_("The required software to play this "
  114.                               "file is not installed. You need to install "
  115.                               "suitable plugins to play "
  116.                               "media files. Do you want to search for a plugin "
  117.                               "that supports the selected file?\n\n"
  118.                               "The search will also include software which is not "
  119.                               "officially supported."))
  120.     btn = dlg.add_button(_("_Search"), gtk.RESPONSE_YES)
  121.     btn.grab_focus()
  122.     dlg.set_title(_("Search for suitable plugin?"))
  123.     set_transient_for_xid(dlg, xid)
  124.     res = dlg.run()
  125.     dlg.destroy()
  126.     while gtk.events_pending():
  127.       gtk.main_iteration()
  128.     if res != gtk.RESPONSE_YES:
  129.       exit(INSTALL_PLUGINS_USER_ABORT)
  130.     import MainWindow
  131.     window = MainWindow.MainWindow(requests, xid)
  132.     exit(window.main())
  133.  
  134.